package com.example.nbb.Service;

import com.example.nbb.Dao.UserDao;
import com.example.nbb.Entity.ResultEntity;
import com.example.nbb.Tool.KoDoTool;
import com.example.nbb.Tool.MD5Tool;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

@Service
public class UserService {
    private static final Logger logger = LoggerFactory.getLogger(UserService.class);//日志。getLogger需要传入当前的类名
    @Resource
    UserDao userDao;
    @Resource
    MD5Tool md5Tool;
    @Resource
    KoDoTool koDoTool;

    //    @Value("/www/wwwroot/SmartLearning/pic/")
    @Value("D:\\Exploitation\\project\\NBB\\nbb\\src\\main\\resources\\static")
    private String localFilePath;//本地文件存储地址

    /**
     * 用户登录
     *
     * @param phone 手机号
     * @param pwd   密码
     * @return 返回
     */
    public String login(String phone, String pwd) {
        System.out.println("前端传入的phone" + phone + "前端传入的密码" + pwd);
        try {
            String Password = md5Tool.ToMD5(pwd);
            System.out.println("md5处理过的密码" + Password);
            return ResultEntity.success(userDao.selectPwdByPhone(phone, Password));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getLocalizedMessage());
            return ResultEntity.fail(-10004);
        }
    }

    /**
     * 用户注册
     *
     * @param userName   用户名
     * @param userAvatar 用户头像
     * @param userPhone  用户手机号
     * @param userPwd    用户密码
     * @return 返回
     */
    public String register(String userName, String userAvatar, String userPhone, String userPwd) {
        try {
            return ResultEntity.success(userDao.insertUser(userName, userAvatar, userPhone, userPwd));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getLocalizedMessage());
            return ResultEntity.fail(-10004);
        }
    }

    /**
     * 根据id修改用户密码接口
     *
     * @param id       用户id
     * @param password 用户密码
     * @return 返回
     */
    public String changePassword(int id, String password) {
        try {
            String Password = md5Tool.ToMD5(password);
            return ResultEntity.success(userDao.updatePassword(id, Password));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getLocalizedMessage());
            return ResultEntity.fail(-10004);
        }
    }

    /**
     * 用户更新头像接口
     *
     * @param id     用户id
     * @param avatar 头像地址
     * @return 返回
     */
    public String updateAvatar(int id, String avatar) {
        try {
            return ResultEntity.success(userDao.updateAvatar(id, avatar));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getLocalizedMessage());
            return ResultEntity.fail(-10004);
        }
    }

    public String upFile(MultipartFile file) {
        //上传文件返回一个url
        String SuffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//获取文件后缀名
        String FileNewName = UUID.randomUUID() + SuffixName;//新的文件名
        File dest = new File(localFilePath + FileNewName);//生成新的文件
        if (!dest.getParentFile().exists()) {//判定文件夹是否存在
            dest.getParentFile().mkdir();//生成文件夹
        }
        try {
            file.transferTo(dest);//将临时文件转为正式文件
            return koDoTool.UploadFile(localFilePath + FileNewName);//返回七牛云的文件路径字符串
        } catch (Exception e) {
            logger.error(e.getMessage());//输出日志
            return ResultEntity.fail(-10001);//返回错误代码
        }
    }

    public String selectAvatar(int id) {
        try {
            return ResultEntity.success(userDao.selectAvatar(id));
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getLocalizedMessage());
            return ResultEntity.fail(-10004);
        }
    }

}
